/*
 * Rust 数据类型学习示例
 * 本文件包含Rust中的基本数据类型和复合数据类型的演示
 */

pub fn main() {
    // ============= 标量类型 (Scalar Types) =============
    // 1. 整数类型
    // 有符号整数: i8, i16, i32, i64, i128, isize
    // 无符号整数: u8, u16, u32, u64, u128, usize
    let a: i32 = -42;       // 32位有符号整数
    let b: u32 = 42;        // 32位无符号整数
    let c = 100;            // 自动推断为i32
    println!("整数类型示例: a = {}, b = {}, c = {}", a, b, c);

    // 2. 浮点数类型
    let x: f32 = 3.14;      // 32位浮点数
    let y: f64 = 2.71828;   // 64位浮点数 (默认)
    println!("浮点数类型示例: x = {}, y = {}", x, y);

    // 3. 布尔类型
    let is_true: bool = true;
    let is_false = false;   // 自动推断为bool
    println!("布尔类型示例: is_true = {}, is_false = {}", is_true, is_false);

    // 4. 字符类型 (Unicode字符)
    let char_a: char = 'A';
    let char_zh: char = '你';
    let char_emoji: char = '😀';
    println!("字符类型示例: char_a = {}, char_zh = {}, char_emoji = {}", char_a, char_zh, char_emoji);

    // ============= 复合类型 (Compound Types) =============
    // 1. 元组 (Tuple) - 可以包含不同类型的值
    let tuple: (i32, f64, bool, char) = (100, 3.14, true, 'R');
    println!("元组示例: tuple = {:?}", tuple);
    println!("元组元素访问: 第一个元素 = {}, 第二个元素 = {}", tuple.0, tuple.1);

    // 2. 数组 (Array) - 包含相同类型的值，长度固定
    let arr1: [i32; 5] = [1, 2, 3, 4, 5];
    let arr2 = [10; 3];     // 初始化3个元素，每个元素都是10
    println!("数组示例1: arr1 = {:?}", arr1);
    println!("数组示例2: arr2 = {:?}", arr2);
    println!("数组元素访问: arr1[2] = {}", arr1[2]);

    // ============= 类型转换 =============
    let num_i32: i32 = 100;
    let num_u32: u32 = num_i32 as u32;  // 显式类型转换
    let num_f64: f64 = num_i32 as f64;
    println!("类型转换示例: i32 = {}, 转换为u32 = {}, 转换为f64 = {}", num_i32, num_u32, num_f64);
}